查看原文
其他

有内味儿了~从乡巴佬变潮人的Houdini毛发制作

瑞云渲染 Lúcio Renderbus瑞云渲染 2023-01-31

关于CG角色的毛发,可以说是影视制作流程中的顶级难题之一。最早只是通过贴图制作角色毛发,这在当时可以说是十分了不起的尝试。


20多年过去了,随着CG技术的不断进步,毛发制作也精细了许多。先来康康《玩具总动员》第一部和第四部的角色毛发对比吧。


《玩具总动员4》


想要让CG创作的毛发具有真实感,这背后复杂的解算以及计算量等方面,一直都是CG制作中棘手难题。随着技术迭代升级,如今艺术家们脑海中CG角色毛发大都可以活灵活现的呈现。



CG毛发技术的进步少不了行业人士不断地探索与学习。来自意大利的资深行业技术讲师Denis Zen和大家分享使用Houdini创建高级感的毛发的教程,让角色的毛发时髦起来~一起来学习一下吧~




Denis Zen,有20多年三维制作及讲师经验,参加他课程的学生有很多在全球顶尖的工作室工作,包括迪斯尼、工业光魔、维塔等。


Zen制作的 Grooming 案例


前言

Houdini通常被视为一个解算(模拟)工具,其实是一个功能齐全的DCC软件,可以做毛发造型,视效开发,灯光渲染等。在这个教程中,我们会展示毛发梳理之前和梳理之后的两种造型,当中会学习到如何使用皮克斯出品的着色器和灯光。


教程会主要介绍毛发梳理“之后”的版本,因为它结合了Houdini 18的最新技术,包括新的绘画属性节点。



PS:感兴趣的小伙伴建议下载教程素材文件,动手学起来(微信公众号后台回复“CG界托尼老师”)


记得要在Houdini打开文件之前设置项目(文件>设置项目...),以便读取$JOB变量,并在项目的tex目录中找到所有纹理,在geo目录中找到头部模型。


Zen使用的头部模型来自3D SCAN STORE,而且是免费。



Scene Setup 场景设置


首先,将模型导入到Houdini并且设置一个非常简单的灯光来检查Groom。这一点非常重要,因为毛发非常稀薄,光线与毛发的交互方式对于造型和视效开发过程至关重要。


第一步(灯光设置将在后面介绍),选择Pxr环境日光,简单而写实的效果是这个灯光的主要特点。


创建一个用于渲染最终帧的新相机也很有用。可以移动透视摄像机拍摄模型。



如图所示,PxrEnvDayLight非常具有交互性,在主灯光阶段可以提供很好的反馈。你只需要调整强度和方向。


要改变光的方向,你可以使用旋转工具或调整基本控制参数(经度,纬度等)。


Latitude(纬度)


Longitude(经度)


你也可以通过调整Sun Size数值以调整阴影的柔软度。


Sun size > 阴影的柔软度


如图所示,因为这是一个Omni Lights(全局光),光线没有变换,也就是说,灯光放置的位置不会影响结果。


Grooming

对于CG界的发型师而言(制作写实毛发的通则),参考素材是基本的。找到360度的发型参考素材并不容易,所以Zen搜索YouTube Beardbrand频道,那里每个视频结尾,发型师会360度展示客户的发型,这就是参考素材。


参考素材源自YouTube Beardbrand频道


Grooming 包括两个步骤:

1、Guide Styling 引导线造型(毛发种植的方式)

2、Hair Styling 毛发造型


Guide styling

Zen喜欢Houdini的程序化工作流程,自带的梳理工具很棒,但Zen通常更愿意使用GroomBear,由Kamil Wacławiak所开发。这个工具很赞,让你发型制作的非常快。



你可以轻松地无损地烘焙该节点,没有这个插件的朋友也可以打开该场景文件或使用云渲染也没问题。


Zen把Grooming分成不同的部分,给他们不同的引导方向和密度。


Hair 头发

Moustache 八字胡

Beard 络腮胡

Eyebrows 眉毛

Eyelashes 睫毛

Nostril hairs 鼻毛

Peach fuzz 绒毛


引导线的造型是关键,也是最困难和费时。

下面这一步在Guide Groom节点中操作:


头顶毛发引导线设置


这些制作过程并不都是一样的。Houdini十分有用的工具之一是Guide Advect工具,它使你可以简单地通过绘制笔触轻松地覆盖毛发。


通过速度场来设置引导点


在这个过程中,继续使用Houdini Grooming工具和GroomBear工具去设计引导线风格。这个过程不是很难,但如果你想做成真实的效果是非常耗时的。


这是最终的样子:


接下来是为每个部分绘制遮罩。这是Grooming的重要部分,因为它可以让你使用颜色图(color maps)控制毛发的生长方式和位置。


Houdini 18引入了一个新版本的Attribute Paint(绘画属性)节点,有了很大改进。



你绘制的遮罩越多,你获得的控制也就越大。以下是Zen的设置:



在这里,我们可以在模型上看到一些可视化内容:


从红外线颜色图可以轻松查看细微的密度差异


Hair styling毛发造型

现在是时候为头发做造型了,因此对于每个引导部分,都创建了一个Hairgen Generate节点,添加各种修改器,使头发看起来尽可能真实。



每种毛发造型都是不同的,但大多数情况下最终会使用相同的修改器。区别在于它们的设置和组合。


最常见的修改器是 Clump、 Noise、 Bend 和 Length。



Zen通常从Clump开始,因为它是每个毛发的灵魂,而且层次是一个关键特征。


你可以用不同的方式设置层次


方法一

你可以使用Clump节点的Clump设置,为每个层次调低数值。



方法二

Houdini Clump节点有一个Fractal Clumping的选项,这个功能很棒。



设置“Fractal Clumping”的数值,你可以使用一个节点来细分发束Clump。


方法三

创建发束层的另一种方法是将“Hair Generate”节点与“Clump”节点的“Custom Clump Curves(自定义聚集曲线)”相连。这样你可以得到更多的控制甚至为毛发/引导线添加修改器:



你也可以用Hair Generate节点制作第一层毛发。使用这个节点的优势是,你可以使用节点参数(density密度, masks遮罩等)更好地控制发束曲线。



为了清楚地可视化你的发束,你可以将“Color(颜色)”节点连接到Hairclump节点的第一个输出(引导线),并分配一个Clumpid变量。



在这之后,Zen使用了一个Noise Modifier (噪波修改器),比如Frizz(毛躁)节点赋予了头发很自然的感觉。通过调整它的设置,你几乎可以得到任何你想要的毛躁效果。



这个节点实现自然的发型的另一个关键特征:飘逸的毛发。打造由于干燥,静电,护发产品和其他原因而产生卷曲的毛发。



要获得飘逸的毛发,使用“Mask(遮罩)”选项卡的“Noise Mask(噪声遮罩)”。将“Gain”设置为1,并调整“Noise Mask Frequency(噪声遮罩频率)”和“Bias”设置,以决定你想要的飘逸感:



变化是另一个关键特征,遮罩Masks就尤为重要。用它们来驱动尽可能多的属性,因为毛发由大约15万个独立的发束组成,这些发束根据许多元素(Dirt污垢,Age年龄,Length长度,Gender性别等)而创建多种样式。


除了我们刚刚看到的Paint属性Mask外,几乎每个Houdini节点属性都有一个菜单,可以让你选择不同类型的Mask。



不幸的是,Houdini没有像Maya中的“噪点”画笔。因此如果要获得一些“邋遢”效果,必须从外部绘画应用程序中导入贴图。


另一个很棒的修改器Bend(弯曲)节点,和Curve Mask(曲线遮罩)一起结合使用:



设置Effect Position(效果位置)和Range Min(最小范围) 和Max(最大值),你可以决定哪一部分(红色)受了影响(选中“Visualize Masks可视化遮罩”以查看它)。


关于毛发真实感的最后一个技巧是Clump节点中的Curl选项。低数值在大多数情况下都能达到很好的效果。



没有选择Curl卷曲。注意,制作的毛发十分规则。



使用Curl卷曲。发型更自然了。有时候很微妙,但是每个细节都很重要。

我们也可以在八字胡和胡须上应用同样的技术。唯一的区别在于修改器的设置,因此你要发挥创意!


这是最终的效果:


Lighting and Shading 灯光和着色

现在我们得到了想要的发型,现在是时候添加一些灯光并开始为模型着色了。


灯光设置非常重要,因为它可以让你检查头发的流动和外观。如果你想转盘渲染(render a turntable),那么你的模型要360度完美呈现。


Zen通常从三点布光开始(Key,Fill,Back)并添加其它的灯光,确保良好展示所有角度:



为了更好地理解灯光是怎样影响你的模型,每次只使用一个灯光。



Houdini网格分布:


Shop通常是创建着色器的地方。


在创建最终着色器之前,Zen通常使用两个简单的灰色着色器:浅灰色的用于头发,深灰色的用于皮肤。


有了这些,可以快速检查模型的毛发和色调的差异,显示发型的空洞或其它一些问题。直到你满意了,才建立最终的。


RenderMan着色器颜色在“Scene View(场景图)”中不可见,并且应用在模型中显示为灰色。为了克服这个问题,必须在材料网络中构建原生的Houdini材质:



点击Scene View工具栏的Texture图标以可视化材质:


如果无法看到着色器的应用,关闭当前的“Scene View”并打开一个新的:


然后创建一个简单的皮肤着色器...在这里就不作深入讲解啦~本文只是让大家了解Zen如何使用Houdini制作毛发。


幸运的是,3D Scan Store的模型都带纹理,你需要在连接纹理之前转换成.tex文件格式。最简单的方法是使RenderMan Texture Manager(纹理管理器),它可以为你处理所有的纹理转换。


你还可以使用 txmake,它位于 $rmantree / bin 中。


贴图转换的一个快速技巧是打开一个空的命令提示符,将txmake可执行文件拖放到cmd窗口中(而不是编写路径),然后拖放要转换的纹理。



要快速保存新的tex文件,请在cmd窗口中拖动纹理两次,并为最后一个添加.tex扩展名。


一旦转换了纹理,创建一个RIS Shader Network(单击RenderMan选项卡中的图标),然后进入新创建的网络,创建一个PxrSurface材质。



在这个节点中你可以创建你的材质。



如图所示,Zen将最终材质分为两部分,一部分是BXDF,另一部分是Displacement,它们通过Collect节点连接在一起,PxrSurface处理表面着色,PxrDisplace处理几何着色。


作为一名Groomer,Zen不会花很多心思处理着色器,因为视效开发人员通常会在制作中完善它,所以Zen简单地将映射(Diffuse漫反射,Specular高光,Normal法线等等)连接输入,并调整一些常规的着色器设置。



请注意,修饰之前的模型皮肤看起来不够清爽,当油渍和污渍覆盖皮肤时,会发生这种情况。你可以使用高光贴图和数值进行调整。



准备好将其应用到模型中,将其加载到Geo节点的Render Tab的材质参数中:


对于头发,Zen制作了四个不同的着色器以实现之前说的变化:


如图所示,每个着色器由两部分组成:Pxr Hair Color和Pxr Marschner Hair。



PxrHairColor是Melanin-besed黑色素样式,所以我们可以通过数值让头发从金色变成黑色:


另一个需要特别注意的设置是Hair ID Primvar,每一个发束都有一个独特的值。如果hairIndexPrimvar数值为空,随机选项不会发挥作用。


看看它们之间的区别:


PxrMarschner毛发着色器可以处理毛发的物理着色。通过更改高光设置(Primary主要,Secondary次要和Transmit透射),你可以从光泽/湿润的外观变为柔和:


对于毛发着色器,以下有很好的文档资源:

PxrHairColor:

https://rmanwiki.pixar.com/display/REN23/PxrHairColor

PxrMarschnerHair:

https://rmanwiki.pixar.com/display/REN23/PxrMarschnerHair


Rendering 渲染

现在可以渲染模型了,Groomer的任务通常还会包含一个360度的转盘渲染,小伙伴们可以尝试旋转相机,这样比较节省时间。通常Zen会这样操作:


  • 创建一个空对象Null Object;

  • 把它放在模型的中心;

  • 动画旋转360度;

  • 将渲染相机作为“动画化的空对象 Animated Null”(已与灯光作为父项)的父项。


该空对象驱动这一切:


在为灯光设置父对象之前,记得检查保持灯光的位置,避免它们错位。


Render Settings渲染设置

创建一个RIS节点,转到Out Network,按Tab并从下拉菜单中选择 RenderMan:



单击刚刚创建的RIS节点,以在Parameter Pane Tab中访问其设置(或按P键)。


Samples采样

已着色的毛发渲染起来非常耗时,你必须特别注意设置,特别是Sampling(采样)。Zen做了很多测试,以下这些数值是速度和质量之间的良好折衷:



噪波在图像的较暗部分中更为明显。要消除它,您可以减小Pixel Variance或增加Maximum Samples:


最后,你可以在灯光设置的“高级”选项卡中增加“Light Samples”:


使用这些设置,噪波更小,光线采样更清晰,但渲染时间也随之更长。


渲染通道Render Passes(AOVs & LPEs)

要想增加照片逼真度,每个图像渲染后要进行后期处理,如果不想费劲处理渲染设置,可以选择多通道渲染,然后在Nuke合成最终效果。


在“Out Network”选择要保存的渲染通道,选择RIS节点,然后在“Parameters Pane Tab”中选择“Images(图像)”:


这些是Zen通常用于合成的通道:


·Standard: z (depth)

·Lighting: albedo, directDiffuse, directSpecular, indirectDiffuse, IndirectSpecular, subsurface


添加渲染通道不会增加渲染时间,因此可以随意选择所需的渲染通道,并将渲染文件另存为OpenEXR(.exr)文件格式。


最后~使用Nuke修改图像。


产生逼真的首个基本效果是景深。尽管DOF在后期中并不像在渲染中那样完美,但很多时候在后期中做会更好,因为:


  • 耗时

  • 不能改变主意


使用z(Depth深度)通道十分轻松,可以在几秒钟内确定图像的焦点在哪一部分。



只需创建一个 ZDefocus 节点:

  • 选择你要的焦点放置focal_point;

  • 将Math设置为Direct(或任何其他选项);

  • 调整景深(图像的焦距);

  • 尺寸和最大值(示效果要多强烈)。


如果将鼠标光标停在字域的值上,Nuke会显示相应的解释。



要使用其他通道,你必须使用Shuffle节点从.exr文件中提取它们:


选择合适的通道后,你需要选择遮罩作为颜色分级。



现在,你可以应用Nuke Color Correction(颜色校正)节点获得最终外观。以下是Zen用来校正图像的简单网络:


这是其中一种结果:


Conclusion 总结

教程中涵盖了Groom到渲染的主要步骤,希望给各位小伙伴们提供一些新的思路。了解了Grooming的过程后,你可以将其中的思路应用到其他地方:例如 XGen、Yeti或者Ornatrix 等一些主流的产品。


素材源自RenderMan及网络




热文推荐堡垒之夜 | 1230万人一起云蹦迪是什么体验?行业动态 |《猫和老鼠》动画导演吉恩·戴奇制作干货 | 这里有个小姐姐在教 Blender

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存